home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / include / gsl / gsl_math.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-20  |  5.8 KB  |  227 lines

  1. /* gsl_math.h
  2.  * 
  3.  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman, Brian Gough
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or (at
  8.  * your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. #ifndef __GSL_MATH_H__
  21. #define __GSL_MATH_H__
  22. #include <math.h>
  23. #include <gsl/gsl_sys.h>
  24. #include <gsl/gsl_machine.h>
  25. #include <gsl/gsl_precision.h>
  26. #include <gsl/gsl_nan.h>
  27. #include <gsl/gsl_pow_int.h>
  28.  
  29. #ifndef M_E
  30. #define M_E        2.71828182845904523536028747135    /* e */
  31. #endif
  32.  
  33. #ifndef M_LOG2E
  34. #define    M_LOG2E    1.44269504088896340735992468100    /* log_2 (e) */
  35. #endif
  36.  
  37. #ifndef M_LOG10E
  38. #define    M_LOG10E   0.43429448190325182765112891892    /* log_10 (e) */
  39. #endif
  40.  
  41. #ifndef M_SQRT2
  42. #define M_SQRT2       1.41421356237309504880168872421      /* sqrt(2) */
  43. #endif
  44.  
  45. #ifndef M_SQRT1_2
  46. #define M_SQRT1_2  0.70710678118654752440084436210      /* sqrt(1/2) */
  47. #endif
  48.  
  49.  
  50. #ifndef M_SQRT3
  51. #define M_SQRT3       1.73205080756887729352744634151      /* sqrt(3) */
  52. #endif
  53.  
  54. #ifndef M_PI
  55. #define M_PI       3.14159265358979323846264338328      /* pi */
  56. #endif
  57.  
  58. #ifndef M_PI_2
  59. #define M_PI_2       1.57079632679489661923132169164      /* pi/2 */
  60. #endif
  61.  
  62. #ifndef M_PI_4
  63. #define M_PI_4     0.78539816339744830966156608458    /* pi/4 */
  64. #endif
  65.  
  66. #ifndef M_SQRTPI
  67. #define M_SQRTPI   1.77245385090551602729816748334    /* sqrt(pi) */
  68. #endif
  69.  
  70. #ifndef M_2_SQRTPI
  71. #define M_2_SQRTPI 1.12837916709551257389615890312    /* 2/sqrt(pi) */
  72. #endif
  73.  
  74. #ifndef M_1_PI
  75. #define M_1_PI       0.31830988618379067153776752675      /* 1/pi */
  76. #endif
  77.  
  78. #ifndef M_2_PI
  79. #define M_2_PI     0.63661977236758134307553505349      /* 2/pi */
  80. #endif
  81.  
  82. #ifndef M_LN10
  83. #define M_LN10     2.30258509299404568401799145468    /* ln(10) */
  84. #endif
  85.  
  86. #ifndef M_LN2
  87. #define M_LN2        0.69314718055994530941723212146    /* ln(2) */
  88. #endif
  89.  
  90. #ifndef M_LNPI
  91. #define M_LNPI     1.14472988584940017414342735135    /* ln(pi) */
  92. #endif
  93.  
  94. #ifndef M_EULER
  95. #define M_EULER    0.57721566490153286060651209008    /* Euler constant */
  96. #endif
  97.  
  98. #undef __BEGIN_DECLS
  99. #undef __END_DECLS
  100. #ifdef __cplusplus
  101. # define __BEGIN_DECLS extern "C" {
  102. # define __END_DECLS }
  103. #else
  104. # define __BEGIN_DECLS /* empty */
  105. # define __END_DECLS /* empty */
  106. #endif
  107.  
  108. __BEGIN_DECLS
  109.  
  110. /* other needlessly compulsive abstractions */
  111.  
  112. #define GSL_IS_ODD(n)  ((n) & 1)
  113. #define GSL_IS_EVEN(n) (!(GSL_IS_ODD(n)))
  114. #define GSL_SIGN(x)    ((x) >= 0.0 ? 1 : -1)
  115.  
  116. /* Return nonzero if x is a real number, i.e. non NaN or infinite. */
  117. #define GSL_IS_REAL(x) (gsl_finite(x))
  118.  
  119. /* Define MAX and MIN macros/functions if they don't exist. */
  120.  
  121. /* plain old macros for general use */
  122. #define GSL_MAX(a,b) ((a) > (b) ? (a) : (b))
  123. #define GSL_MIN(a,b) ((a) < (b) ? (a) : (b))
  124.  
  125. /* function versions of the above, in case they are needed */
  126. double gsl_max (double a, double b);
  127. double gsl_min (double a, double b);
  128.  
  129. /* inline-friendly strongly typed versions */
  130. #ifdef HAVE_INLINE
  131.  
  132. extern inline int GSL_MAX_INT (int a, int b);
  133. extern inline int GSL_MIN_INT (int a, int b);
  134. extern inline double GSL_MAX_DBL (double a, double b);
  135. extern inline double GSL_MIN_DBL (double a, double b);
  136. extern inline long double GSL_MAX_LDBL (long double a, long double b);
  137. extern inline long double GSL_MIN_LDBL (long double a, long double b);
  138.  
  139. extern inline int
  140. GSL_MAX_INT (int a, int b)
  141. {
  142.   return GSL_MAX (a, b);
  143. }
  144.  
  145. extern inline int
  146. GSL_MIN_INT (int a, int b)
  147. {
  148.   return GSL_MIN (a, b);
  149. }
  150.  
  151. extern inline double
  152. GSL_MAX_DBL (double a, double b)
  153. {
  154.   return GSL_MAX (a, b);
  155. }
  156.  
  157. extern inline double
  158. GSL_MIN_DBL (double a, double b)
  159. {
  160.   return GSL_MIN (a, b);
  161. }
  162.  
  163. extern inline long double
  164. GSL_MAX_LDBL (long double a, long double b)
  165. {
  166.   return GSL_MAX (a, b);
  167. }
  168.  
  169. extern inline long double
  170. GSL_MIN_LDBL (long double a, long double b)
  171. {
  172.   return GSL_MIN (a, b);
  173. }
  174. #else
  175. #define GSL_MAX_INT(a,b)   GSL_MAX(a,b)
  176. #define GSL_MIN_INT(a,b)   GSL_MIN(a,b)
  177. #define GSL_MAX_DBL(a,b)   GSL_MAX(a,b)
  178. #define GSL_MIN_DBL(a,b)   GSL_MIN(a,b)
  179. #define GSL_MAX_LDBL(a,b)  GSL_MAX(a,b)
  180. #define GSL_MIN_LDBL(a,b)  GSL_MIN(a,b)
  181. #endif /* HAVE_INLINE */
  182.  
  183. /* Definition of an arbitrary function with parameters */
  184.  
  185. struct gsl_function_struct 
  186. {
  187.   double (* function) (double x, void * params);
  188.   void * params;
  189. };
  190.  
  191. typedef struct gsl_function_struct gsl_function ;
  192.  
  193. #define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params)
  194.  
  195. /* Definition of an arbitrary function returning two values, r1, r2 */
  196.  
  197. struct gsl_function_fdf_struct 
  198. {
  199.   double (* f) (double x, void * params);
  200.   double (* df) (double x, void * params);
  201.   void (* fdf) (double x, void * params, double * f, double * df);
  202.   void * params;
  203. };
  204.  
  205. typedef struct gsl_function_fdf_struct gsl_function_fdf ;
  206.  
  207. #define GSL_FN_FDF_EVAL_F(FDF,x) (*((FDF)->f))(x,(FDF)->params)
  208. #define GSL_FN_FDF_EVAL_DF(FDF,x) (*((FDF)->df))(x,(FDF)->params)
  209. #define GSL_FN_FDF_EVAL_F_DF(FDF,x,y,dy) (*((FDF)->fdf))(x,(FDF)->params,(y),(dy))
  210.  
  211.  
  212. /* Definition of an arbitrary vector-valued function with parameters */
  213.  
  214. struct gsl_function_vec_struct 
  215. {
  216.   int (* function) (double x, double y[], void * params);
  217.   void * params;
  218. };
  219.  
  220. typedef struct gsl_function_vec_struct gsl_function_vec ;
  221.  
  222. #define GSL_FN_VEC_EVAL(F,x,y) (*((F)->function))(x,y,(F)->params)
  223.  
  224. __END_DECLS
  225.  
  226. #endif /* __GSL_MATH_H__ */
  227.